using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._3DProximity
{
    /// <summary>
    /// <para>Union 3D</para>
    /// <para>Merges closed, overlapping multipatch features from an input feature class.</para>
    /// <para>合并输入要素类中的闭合、重叠的多面体要素。</para>
    /// </summary>    
    [DisplayName("Union 3D")]
    public class Union3D : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Union3D()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_class">
        /// <para>Input Multipatch Features</para>
        /// <para>The multipatch features that will be unioned.</para>
        /// <para>将联合的多面体要素。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The output multipatch feature class that will store the aggregated features.</para>
        /// <para>用于存储聚合要素的输出多面体要素类。</para>
        /// </param>
        public Union3D(object _in_feature_class, object _out_feature_class)
        {
            this._in_feature_class = _in_feature_class;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Union 3D";

        public override string CallName => "3d.Union3D";

        public override List<string> AcceptEnvironments => ["XYDomain", "ZDomain", "autoCommit", "configKeyword", "extent", "geographicTransformations", "outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_in_feature_class, _out_feature_class, _group_field, _disable_optimization.GetGPValue(), _output_all.GetGPValue(), _out_table];

        /// <summary>
        /// <para>Input Multipatch Features</para>
        /// <para>The multipatch features that will be unioned.</para>
        /// <para>将联合的多面体要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Multipatch Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output multipatch feature class that will store the aggregated features.</para>
        /// <para>用于存储聚合要素的输出多面体要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Grouping Field</para>
        /// <para>The field used to identify the features that should be grouped together.</para>
        /// <para>用于标识应组合在一起的要素的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Grouping Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _group_field { get; set; } = null;


        /// <summary>
        /// <para>Disable Optimization</para>
        /// <para><xdoc>
        ///   <para>Specifies whether optimization is performed or not performed on the input data. Optimization will preprocess the input data by grouping them to improve performance and create unique outputs for each set of overlapping features.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Optimization is enabled, and the grouping field is ignored. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—No optimization is performed on the input data. Features will either be stored in a single output feature or be unioned according to their grouping field, if one is provided.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否对输入数据执行优化。优化将通过对输入数据进行分组来预处理输入数据，以提高性能，并为每组重叠要素创建唯一的输出。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 启用优化，并忽略分组字段。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 不对输入数据执行优化。要素将存储在单个输出要素中，或者根据其分组字段（如果提供）进行并集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Disable Optimization")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _disable_optimization_value _disable_optimization { get; set; } = _disable_optimization_value._false;

        public enum _disable_optimization_value
        {
            /// <summary>
            /// <para>DISABLE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DISABLE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>ENABLE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ENABLE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output All Solids</para>
        /// <para><xdoc>
        ///   <para>Determines if the output feature class contains all features or only the overlapping ones that were unioned.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—All input features are written to the output. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Only unioned features are written to the output. Non-overlapping features will be ignored.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定输出要素类是包含所有要素还是仅包含已并集的重叠要素。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 所有输入要素都写入输出。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 仅将并集要素写入输出。非重叠要素将被忽略。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output All Solids")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _output_all_value _output_all { get; set; } = _output_all_value._true;

        public enum _output_all_value
        {
            /// <summary>
            /// <para>ENABLE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ENABLE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DISABLE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DISABLE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Table</para>
        /// <para>A many-to-one table that identifies the input features that contribute to each output.</para>
        /// <para>一个多对一表，用于标识对每个输出有贡献的输入要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_table { get; set; } = null;


        public Union3D SetEnv(object XYDomain = null, object ZDomain = null, int? autoCommit = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, ZDomain: ZDomain, autoCommit: autoCommit, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}